<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
   <HEAD>
      <TITLE>
         FastCGI Programmer&#39;s Guide - Chapter 4, Developing FastCGI Applications in Tcl
      </TITLE>
<STYLE TYPE="text/css">
 body {
  background-color: #ffffff;
 }
 li.c2 {list-style: none}
 div.c1 {text-align: center}
</STYLE>
   </HEAD>
   <BODY>
      <A HREF="cover.htm">[Top]</A> <A HREF="ch3perl.htm">[Prev]</A> <A HREF="apaman.htm">[Next]</A> <A HREF=
      "ap_guida.htm">[Bottom]</A> 
      <HR>
      <BR>
       <A NAME="3659"></A>
      <DIV CLASS="c1">
         <H1>
            4 Developing FastCGI<BR>
            Applications in Tcl
         </H1>
      </DIV>
      <A NAME="4835"></A>
      <P>
         This chapter explains how to code FastCGI applications in Tcl. Prior to creating a FastCGI application, you
         must have a FastCGI-savvy version of the Tcl interpreter. Open Market develops Tcl binaries for popular
         platforms and makes them available with our developer&#39;s kit.
      </P>
      <P>
         <A NAME="4943"></A> The FastCGI-savvy binaries are extensions of standard Tcl, and are intended to replace
         your existing Tcl installation. There is no need to maintain two versions of Tcl: the version that we supply
         will work fine when invoked from a shell or a CGI program. There are also directions in the developer&#39;s
         kit for how to make your own FastCGI-savvy Tcl, if you need a version for some platform that we don&#39;t
         supply.
      </P>
      <P>
         <A NAME="4221"></A> In many cases, you can convert a Tcl script from CGI to FastCGI by adding a few lines of
         code to an existing script. For more complex scripts, you may also need to rearrange some existing code.
      </P>
      <BR>
      <BR>
      <H1>
         Getting Started
      </H1>
      <A NAME="4223"></A>
      <P>
         The first line of any Tcl script typically specifies the pathname of the Tcl interpreter itself. You must
         specify the pathname of a FastCGI-savvy Tcl.
      </P>
      <P>
         <A NAME="4226"></A> Then, you have to divide FastCGI scripts into the following two sections:
      </P>
      <BR>
      <BR>
      <UL>
         <LI CLASS="c2">
            <A NAME="4227"></A>
         </LI>
         <LI>
            Initialization section, which is executed only once. <A NAME="4228"></A>
         </LI>
         <LI>
            Response loop section, which gets executed every time the FastCGI script gets called.
         </LI>
      </UL>
      <A NAME="4229"></A>
      <P>
         A response loop typically has the following format:
      </P>
      <BR>
      <BR>
<PRE>
<A NAME="4923">while {[FCGI_Accept] &gt;= 0 } {
</A>
<A NAME="4925"># body of response loop
</A>
<A NAME="4367">}
</A>
</PRE>
      <A NAME="4233"></A>
      <P>
         The <CODE>FCGI_Accept</CODE> call returns 0 whenever a client requests the FastCGI script. Otherwise, the
         <CODE>FCGI_Accept</CODE> call returns -1.
      </P>
      <BR>
      <BR>
      <H1>
         Example: TinyFastCGI
      </H1>
      <A NAME="4343"></A>
      <P>
         Here is a simple example of a FastCGI application written in Tcl:
      </P>
      <BR>
      <BR>
<PRE>
<A NAME="4344"></A>
#!fcgi-savvy-tcl

set count 0

# Response Loop
while {[FCGI_Accept] &gt;= 0 } {
        incr count
        puts -nonewline &quot;Content-type: text/html\r\n\r\n&quot;
        puts &quot;&lt;title&gt;FastCGI Hello! (Tcl)&lt;/title&gt;&quot;
        puts &quot;&lt;h1&gt;FastCGI Hello! (Tcl)&lt;/h1&gt;&quot;
        puts &quot;Request number $count running on host  &lt;i&gt;$env(SERVER_NAME)&lt;/i&gt;&quot;
}
</PRE>
      <P>
      </P>
      <HR>
      <BR>
       <A HREF="cover.htm">[Top]</A> <A HREF="ch3perl.htm">[Prev]</A> <A HREF="apaman.htm">[Next]</A> <A HREF=
      "ap_guida.htm">[Bottom]</A> 
      <HR>
      <BR>
       <!-- This file was created with Quadralay WebWorks Publisher 3.0.3 -->
      <!-- -->
      <!-- For more information on how this document, and how the rest of -->
      <!-- this server was created, email yourEmail@xyzcorp.com -->
      <!-- -->
      <!-- Last updated: 04/15/96 08:00:19 -->
   </BODY>
</HTML>

